package main

import (
	"WebLearning/web-18/pb"
	"context"
	"fmt"
	"google.golang.org/grpc"
	"log"
	"net"
)

type server struct {
	pb.UnimplementedGreeterServer //匿名struct 来实现grpc所需要的接口

}

// SayHello implements helloworld.GreeterServer
func (s server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
	log.Printf("Received: %v", in.GetName())
	return &pb.HelloResponse{Name: in.GetName()}, nil
}

func main() {
	listen, err := net.Listen("tcp", ":8080")
	if err != nil {
		fmt.Println(err)
		return
	}
	s := grpc.NewServer()
	pb.RegisterGreeterServer(s, &server{}) // 在gRPC服务端注册服务
	//reflection.Register(s)//在给定的gRPC服务器上注册服务器反射服务
	// Serve方法在lis上接受传入连接，为每个连接创建一个ServerTransport和server的goroutine。
	// 该goroutine读取gRPC请求，然后调用已注册的处理程序来响应它们。
	log.Printf("server listening at %v", listen.Addr())
	err = s.Serve(listen) //里面有一个Accept阻塞

	if err != nil {
		fmt.Printf("failed to serve: %v", err)
		return
	}
}
